TCP 타이머
IT 위키
더 많은 작업
- Retransmission Timer
- 송신측은 매 세그먼트를 전송할 때 마다 재전송 타이머 가동
- 정해진 시간(RTO, Retransmission Timeout) 내 수신 확인응답(ACK)이 안되면 재전송
- 타이머는 동적(dynamic) 또는 적응적(adaptive)으로 조정
- Persistence Timer
- 주기적으로 송신하는 Window Probe 패킷의 송신 주기를 처리하는 타이머
- 세그먼트 전송 중단 후 전송 재개를 알리는 ack 의 손실로 교착상태에 빠지는 것을 방지
- Time-waited Timer
- TCP 연결 종료 후에 이 기간 동안 만 연결을 유지
- 이전 연결 종료 전의 어떤 패킷이 늦게, 중복지연 도착하게되는 것을 방지
- 이 기간 동안 중복지연된 패킷이 오면 폐기함
- Keepalive Timer
- 이미 설정된 연결이 오랫동안 휴지 상태에 있지 않도록 하기 위함
- 통상 2시간 동안 아무런 패킷도 오지 않으면,
- 또는 프로브(Probe) 패킷을 75초 간격으로 10번 송신하고도 응답이 없으면
- TCP 표준에 공식적인 언급 없으나 일반적으로 사용
- 리눅스에서는 커널 변수로 정한다. 값을 바꾸는 방법은 리눅스 sysctl
| 커널 변수 | 뜻 | 기본값 |
|---|---|---|
| net.ipv4.tcp_keepalive_time | 마지막 데이터 뒤 첫 프로브를 보내기까지 기다리는 시간(초). 곧 쉬고 있는 연결을 확인 없이 유지하는 시간 | 7200 (2시간) |
| net.ipv4.tcp_keepalive_intvl | 프로브 사이 간격(초) | 75 |
| net.ipv4.tcp_keepalive_probes | 응답 없이 보낼 프로브 수. 모두 실패하면 연결을 끊는다 | 9 |
- 3시간으로 늘리려면
echo 10800 > /proc/sys/net/ipv4/tcp_keepalive_time또는sysctl -w net.ipv4.tcp_keepalive_time=10800. 단위가 초이므로 3 을 넣으면 3초다 - keepalive 는 소켓에 SO_KEEPALIVE 옵션을 켠 연결에만 적용된다
- net.ipv4.tcp_fin_timeout 은 keepalive 와 관계없이 FIN_WAIT2 상태를 기다리는 시간(기본 60초)이다 → TCP 연결 상태